// 引入express模块
const express = require('express')
// 引入cors模块
const cors = require('cors')
// 引入path模块
const path = require("path")
// 导入jsonwebtoken生成jwt字符串的模块
const jwt = require("jsonwebtoken")
// 导入express-jwt，将前端发送过来的jwt字符串，解析还原成json对象的模块
// 6.x直接接收，8.需要解构
const expressJWT = require("express-jwt")
// 获取密钥
const { secretKey } = require("./auth/config")
// 导入Response
const Response = require("./utils/ResponseData")
const Content = require("./utils/Content")
// 创建服务
const app = new express()

// 配置jwt拦截规则
// unless() 配置不需要做身份鉴权的路由地址
app.use(expressJWT({ secret: secretKey, algorithms: ['HS256'] }).unless({
    path: [
        '/adminLogin',
        /^\/user\//,
        // '/user/checkEmail',
        // '/user/sendCode',
        // '/user/checkCode'
    ]
}))

// 引入中间件
// 所有的中间件都是在服务器下边写，所有的路由都可以用到浏览器
// 浏览器先请求，中间件拦截，然后将请求的数据处理解析

// 启动服务器
// 3000是服务端端口号
// 默认启动服务器的命令：node app.js
app.listen(3001, () => {
    console.log("服务器启动成功：", "http://localhost:3001")
})
// 配置跨域请求中间件
app.use(cors({
    // 允许跨域的服务器地址，可以写多个，（这里就是vue工程的服务地址）
    // origin: "*",
    credentials: true // 允许前端携带验证信息
    // origin: [
    //     'http://127.0.0.1:8083',
    //     'http://localhost:8083',
    //     'http://127.0.0.1:8082',
    //     'http://localhost:8082',
    //     'http://127.0.0.1:8081',
    //     'http://localhost:8081',
    //     'http://127.0.0.1:8080',
    //     'http://localhost:8080',
    //     'http://127.0.0.1:3001',
    //     'http://localhost:3001',
    // ]

}))
// 配置内容解析器
// 内容解析器：body-parser
const bodyParser = require("express")
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

// 使用错误处理中间件，拦截所有路由中抛出的异常
app.use((err, req, res, next) => {
    // tokon校验不通过提示
    if (err.name = "UnauthorizedError") {
        return res.send(Response.error("tonken已失效，请重新登录！", Content.AUTH_ERROR))
    }
    // 打印异常
    console.log("异常信息：", err);
    // 设置http响应的状态码，响应到前端
    res.send(Response.error("服务器异常，请重新访问！", 500))
    next()

})
// 导入相关路由文件
const petAdmin = require("./routes/admin/PetAdmin")
const petBusiness = require("./routes/admin/PetBusiness")
const petDairy = require("./routes/admin/PetDairy")
const petOrder = require("./routes/admin/PetOrder")
const petUser = require("./routes/admin/PetUser")

const userRouter = require("./routes/user/User")
const dailyRouter = require("./routes/user/Daily")
const busRouter = require("./routes/user/Bus")
const contactRouter = require("./routes/user/Contact")
const petRouter = require("./routes/user/Pet.js")
// 使用路由
app.use(petUser)
app.use(petAdmin)
app.use(petBusiness)
app.use(petDairy)
app.use(petOrder)
app.use("/user", userRouter) // /user/checkEmail
app.use("/daily", dailyRouter)
app.use("/bus", busRouter)
app.use("/contact", contactRouter)
app.use("/pet", petRouter)



// 托管静态资源文件
app.use(express.static("./public"))
app.use(express.static(path.join(__dirname, "public")))
// 拦截前端请求错误
const history = require("connect-history-api-fallback");
app.use(history())

